
package com.x52im.mall.logic.shop;

import java.util.ArrayList;

import android.app.Activity;

import com.x52im.mall.MallGlobal;
import com.eva.epc.common.util.CommonUtils;
import com.x52im.mall.shop.dto.Device;
import com.x52im.mall.shop.dto.SODetail;

public class ShopCarProvider
{
	private final static String TAG = ShopCarProvider.class.getSimpleName();
	
//	/** 已经放入购物车中的商品（key=商品id, value=购买数据） */
//	private MapNoHash<String, Integer> goodsInCar = new MapNoHash<String, Integer>(); 
	
	/** 购物车中的商品：同一个商品id、不同的颜色在购物车中将被认为是不同的商品 */
	private ArrayList<SODetail> goodsInCar = new ArrayList<SODetail>();
	
	public ShopCarProvider()
	{
		//
	}
	
	/**
	 * 指定商品id、指定颜色是否存在于购物车中。
	 * 
	 * @param good_id
	 * @param color_id
	 * @return true表示已存在于购物车中，否则表示尚未加入购物车
	 */
	public boolean contains(String good_id, String color_id)
	{
		for(SODetail sdo : goodsInCar)
		{
			if(sdo.getDevice_id().equals(good_id) && sdo.getColor_id().equals(color_id))
				return true;
		}
		return false;
	}
	
	/**
	 * 返回存在于购物车中的指定商品id、指定颜色的商品。
	 * 
	 * @param good_id
	 * @param color_id
	 * @return 如果该商品已存在于购物车中则返回它的实例引用，否则返回null
	 */
	public SODetail getGoodInCar(String good_id, String color_id)
	{
		for(SODetail sdo : goodsInCar)
		{
			if(sdo.getDevice_id().equals(good_id) && sdo.getColor_id().equals(color_id))
				return sdo;
		}
		return null;
	}
	
	/**
	 * 返回购物车商品列表.
	 * 
	 * @return
	 */
	public ArrayList<SODetail> getGoodsInCar()
	{
		return goodsInCar;
	}
	
	/**
	 * 加入商品到购物车.
	 * <p>
	 * 如果该产品存在则在原数量上加上新购买数.
	 * 
	 * @param good_id
	 * @param quantity
	 * @return 该商品在购物车中的当前总数（含本次加入的数量）
	 */
	public int addToCar(Activity parentActivity, String good_id, String color_id, String color_desc, int quantity)
	{
		SODetail sod = getGoodInCar(good_id, color_id);
		// 如果该商品已经加入了购物车则把新购数据加到原数据量上
		if(sod != null)
		{
			quantity = Integer.parseInt(sod.getPurchase_quantity()) + quantity;
			sod.setPurchase_quantity(String.valueOf(quantity));
		}
		else
		{
			// ** 商品基本信息
			Device goodInfo = MallGlobal.getMallProviderInstance(parentActivity)
					.getRobotimeMall().getGoodsProvider().getDeviceById(good_id);
			
			// ** 购买数据DTO
			SODetail newSod = new SODetail();
			newSod.setDevice_id(good_id);
			newSod.setColor_id(color_id);
			newSod.setColor_desc(color_desc);
			newSod.setPurchase_quantity(String.valueOf(quantity));
			newSod.setPurchase_price(goodInfo.getSale_price());
//			// 计算金额小计
//			newSod.reCalculatorAmount();
			
			// 加入购物车
			goodsInCar.add(newSod);
		}
		
		return quantity;
	}
	
	/**
	 * 从购物车中移除一个商品（同一商品号、不同的颜色在购物车中被认为是不同的商品）.
	 * 
	 * @param good_id
	 * @param color_id
	 * @return
	 */
	public boolean removeFromCar(String good_id, String color_id)
	{
		for(SODetail sdo : goodsInCar)
		{
			if(sdo.getDevice_id().equals(good_id) && sdo.getColor_id().equals(color_id))
			{
				goodsInCar.remove(sdo);
				return true;
			}
		}
		
		return false;
	}
	
	/**
	 * 返回购物车中商品数量.
	 * 
	 * @return
	 */
	public int size()
	{
		return goodsInCar.size();
	}
	
	/**
	 * 清空购物车.
	 */
	public void clearCar()
	{
		goodsInCar.clear();
	}
	
	/**
	 * 获得购物车中商品总金额（不含运费哦）。
	 * 
	 * @return
	 */
	public double getGoodsAmount()
	{
		double amount =0;
		for(SODetail sdo : goodsInCar)
			amount += CommonUtils.getDoubleValue(sdo.getPurchase_amount());
		return amount;
	}
	/**
	 * 获得购物车中商品总数量。
	 * 
	 * @return
	 */
	public int getGoodsCount()
	{
		int count =0;
		for(SODetail sdo : goodsInCar)
			count += CommonUtils.getIntValue(sdo.getPurchase_quantity());
		return count;
	}
	
	public int getOrdersCount()
	{
		int count = 0;
		
		return count;
	}
}
